1?-use_module(library(lists)).    2
    3
    4
    5%go(Result):-
    6%cleanTemporalOrderings([[happens(createFormelement(restrictedDrugs,radiobtn,[size=2]),t149,t149),happens(entry(form,element,guard),t121,t121),happens(edgeProgression(form2,formElement(test2,value)),t132,t132),happens(formSubmission(form2),t129,t129),happens(entry(form,element,woobe),t120,t120),happens(formEntry(form2,jw99),t125,t125),happens(formEntry(form1,jw99),t8,t8),happens(createFormelement(textboxform1,textbox,[multline,numlines(4)]),t115,t115),happens(formSubmission(form1),t14,t14),happens(edgeProgression(form1,formElement(correctDrugs,off)),t108,t108)],[before(t149,t136),before(t138,t149),before(t115,t146),before(t148,t115),before(t142,t108),before(t146,t14),before(t8,t148),before(t14,t142),before(t134,t140),before(t136,t129),before(t125,t138),before(t129,t134),before(t134,t132),before(t132,t131),before(t131,t),before(t125,t131),before(t107,t125),before(t121,t119),before(t120,t118),before(t119,t14),before(t115,t118),before(t118,t119),before(t115,t112),before(t114,t115),before(t110,t108),before(t112,t14),before(t8,t114),before(t14,t110),before(t108,t107),before(t8,t107)]], Result), write(Result).
    7
    8
    9
   10cleanTemporalOrderings([Plan,Ordering], ValidOrderings):-
   11	fetchTemporalReferences(Plan, TempRefs),!,
   12	append([t], TempRefs, FinalTempRefs),
   13	cleanTemp(FinalTempRefs, Ordering, ValidOrderings), 
   14	
   15	% Cut required when generating multiple solutions to avoid
   16	% backtrack possible cleaning options
   17	!.
   18
   19	
   20	
   21	
   22	
   23cleanTemp( TempRefs, [], []).	
   24cleanTemp( TempRefs, [before(X,Y) | Tail] ,[ before(X,Y) | TailTemp]):-
   25	member(X, TempRefs),
   26	member(Y, TempRefs),
   27	cleanTemp( TempRefs, Tail,TailTemp ).	
   28	
   29cleanTemp( TempRefs, [before(X,Y) | Tail] ,[ before(X,Unknown ) | TailTemp ] ):-
   30	
   31	member(X,TempRefs),
   32	\+ member(Y, TempRefs),	
   33	
   34	member(before(Y, Unknown ), Tail),
   35	
   36	cleanTemp( TempRefs, Tail,TailTemp ).		
   37
   38cleanTemp( TempRefs, [before(X,Y) | Tail] , [ before(Unknown,Y ) | TailTemp] ):-
   39	member(Y,TempRefs),
   40	\+ member(X, TempRefs),	
   41	
   42	member(before(Unknown,X), Tail),
   43		
   44	cleanTemp( TempRefs, Tail,TailTemp ).		
   45
   46%delete rudundant temporal ordering
   47cleanTemp( TempRefs, [before(X,Y) | Tail] , TailTemp ):-
   48	cleanTemp( TempRefs, Tail,TailTemp ).		
   49		
   50	
   51	
   52fetchTemporalReferences([] ,[]).
   53fetchTemporalReferences([happens(A,F,T)|Tail], [ T | TempRefs]):-
   54	fetchTemporalReferences(Tail, TempRefs).
   55
   56fetchTemporalReferences([before(X,Y)|Tail], [ T | TempRefs]):-
   57	fetchTemporalReferences(Tail, TempRefs).
   58	
   59		
   60clean(Z):-cleanTemp([t75,t45,t58,t29,t34],[before(t75,t92),before(t92,t34),before(t29,t75),before(t58,t60),before(t60,t29),before(t45,t58),before(t34,t)],Z)